package cn.walls1717.wallsmall.product.service;

import cn.walls1717.wallsmall.common.utils.PageUtils;
import cn.walls1717.wallsmall.product.entity.AttrEntity;
import cn.walls1717.wallsmall.product.entity.ProductAttrValueEntity;
import cn.walls1717.wallsmall.product.vo.AttrRespVO;
import cn.walls1717.wallsmall.product.vo.AttrVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * 商品属性
 *
 * @author walls1717
 * @email walls1717@163.com
 * @date 2022-10-21 11:26:47
 */
public interface AttrService extends IService<AttrEntity> {

    /**
     * 分页展示与模糊查询
     *
     * @param params 查询参数
     * @param catId 分类id
     * @param type
     * @return 分页数据
     */
    PageUtils listPages(Map<String, Object> params, Long catId, String type);

    /**
     * 保存属性数据
     *
     * @param attr 属性
     */
    void saveAttrWithAttrAttrGroupRelation(AttrVO attr);

    /**
     * 获取属性详细信息
     *
     * @param attrId 属性id
     * @return AttrRespVO
     */
    AttrRespVO getAttrInfo(Long attrId);

    /**
     * 修改属性信息，同时修改属性与属性分组的关联关系
     *
     * @param attrVO 修改参数
     */
    void updateAttrWithAttrAttrGroupRelation(AttrVO attrVO);

    /**
     * 根据属性分组id查询所有属性
     *
     *
     * @param attrGroupId 属性分组id
     * @return 所有属性
     */
    List<AttrEntity> listAttrsByAttrGroupId(Long attrGroupId);

    /**
     * 获取属性分组没有关联的其他属性
     *
     * @param params 分页条件与查询条件
     * @param attrGroupId 属性分组id
     * @return 分页数据
     */
    PageUtils listNoAttrsByAttrGroupId(Map<String, Object> params, Long attrGroupId);

    /**
     * 根据spuId查询商品属性
     *
     * @param spuId spuId
     * @return 商品属性集合
     */
    List<ProductAttrValueEntity> listProductAttrsBySpuId(Long spuId);

    /**
     * 根据attrId集合查找检索属性的attrId search_type:1
     *
     * @param attrIds attrIds
     * @return 检索属性的attrId集合
     */
    List<Long> listSearchAttrIdsByAttIds(List<Long> attrIds);
}
